
/*
 * Este programa ordena una lista de numeros mediante el algoritmo de MergeSort.
 * Todo el procesamiento de este programa es realizado en forma secuencial.
 */

/* Inclusión de bibliotecas propias */
#include "../compartido/vectores.h"
#include "../compartido/entrada-salida.h"
#include "../compartido/mergesort.h"

/* Inclusión de bicliotecas estandares */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


/* Sección de implementación de funciones */

int main(void) {

    // Imprimimos la bienvenida
    printf("====================================================================\n");
    printf("Ordenamiento de números mediante Merge Sort. VERSIÓN SECUENCIAL\n");
    printf("====================================================================\n");

    // Obtenemos la lista de elementos a ordenar y su tamaño.
    struct VECTOR *vectorEnDisco = obtenerVectorDelUsuario();

    // En esta variable guardaremos el instante en que el cálculo comienza.
    time_t instanteInicial = time(NULL);

    // Llamamos a la función que realiza el ordenamiento mediante el algoritmo MergeSort
    printf("Ordenamos la lista\n");
    mergesortEnDisco(vectorEnDisco);

    // Guardamos el momento final e imprimimos el tiempo de ejecucion.
    time_t instanteFinal = time(NULL);
    double tiempoEjecucion = difftime(instanteFinal,instanteInicial);
    printf("\nTiempo de ejecucion: %.2f segundos\n", tiempoEjecucion);

    // Mostramos el vector por pantalla
    mostrarVector(vectorEnDisco);
    
    // Guardamos el vector ordenado en disco y terminamos el programa
    almacenarVector(vectorEnDisco, "lista ordenada");
    eliminarVector(vectorEnDisco);

    printf("\n====================================================================\n");
    printf("Fin del programa\n");
    printf("====================================================================\n\n");

    return (EXIT_SUCCESS);

}
